

(defpackage :gen-res
  (:use :db.agraph.user :common-lisp)
  (:export :lbd :b-day :pf :newton :fact))



(in-package :gen-res)

;;; pm http://www.possibly-sam.com/pm/2010/8/pm-03#
;;; pmi http://www.possibly-sam.com/pm/2010/8/pmi-03#
;;; t http://franz.com/ns/allegrograph/3.0/temporal/
;;; C:\acl82express\rdf-03\
 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(defun generic-resource-setup () 
 (db.agraph.user::enable-!-reader)  
  (db.agraph.user::register-namespace "ex" "http://www.franz.com/simple#")  
  (db.agraph.user::register-namespace "pm" "http://www.possibly-sam.com/pm/2010/8/pm-03#")
  (db.agraph.user::register-namespace "pmi" "http://www.possibly-sam.com/pm/2010/8/pmi-03#")
  (db.agraph.user::register-namespace "t" "http://franz.com/ns/allegrograph/3.0/temporal/") 
  (setf db.agraph.user::*get-triples-list-limit* 999)
  (setf db.agraph.user::*print-triples-list-limit* 999)
  (db.agraph.user::enable-!-reader)
  )

(generic-resource-setup)

   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(defun print-nice-triple ( s p o &optional out)
  (format out "~a[~a] =~25,5:T~a" s p o) )

(defmacro pnt- ( m id item ) 
  `(print-nice-triple (slot-value ,m ,id) (string ,item) (slot-value ,m ,item))
  )

(defun pnt ( m id item ) 
  (print-nice-triple (slot-value m id) (string item) (slot-value m item))
  )


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defmacro db () (in-package :db.agraph.user))
 
(defun all-triples (&optional (format :terse)) (db.agraph.user::print-triples (db.agraph.user::get-triples-list) :format format))

(defmacro att () (all-triples :terse))
(defmacro atc () (all-triples :concise))
(defmacro atl () (all-triples :long))


(defmacro destroy-everything () 
  (labels
      (
       (fn (n) (db.agraph.user::delete-triple (db.agraph.user::triple-id n)))
       )
           (mapcar  #'fn (db.agraph.user::get-triples-list))
    
    )
  )



(defun make-nice (str) (format nil "<~a>" str))

(defun make-nice-ns (ns str) 
  (format nil "<~a~a>" 
    (if ns (db.agraph.user::lookup-namespace ns) "")
    str))

(defun make-nice-literal (literal the-type)
  (format nil "\"~a\"^^<~a~a>" 
    literal
    (db.agraph.user::lookup-namespace "xs")
    the-type))
    

(defmacro t-integer (n) `(make-nice-literal ,n "integer"))
(defmacro t-string (n) `(make-nice-literal ,n "string"))
(defmacro t-time (n) `(db.agraph.user::date-string-to-upi ,n) )
(defmacro blank-node(n) `(format nil "<_:~a>" ,n))


(defmacro t-elt (ns str) `(make-nice-ns ,ns ,str))
(defmacro time-predicate () (t-elt "t" "time"))



(defmacro t-triple (s p o) 
  `(db.agraph.user::add-triple ,s ,p ,o))




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



(defun store-triple (&key s-ns s p-ns p o-ns o)
  (let*
      (
       ( the-subject (make-nice-ns s-ns s))
       ( the-predicate (make-nice-ns p-ns p))
       ( the-object (make-nice-ns o-ns o))
       )
    
    (db.agraph.user::add-triple the-subject the-predicate the-object)
    
    ) ; end let
  ) ; end defun

(defun add-resource (n)
  (t-triple (t-elt "pm" n)
            (t-elt "rdf" "type")
            (t-elt "rdfs" "Class")
            ))
  
  ; (store-triple :s-ns "pm" :s n :p-ns "rdf" :p "type" :o-ns "rdfs" :o "Class"))

(defun make-subclass (child parent)
  
  (t-triple (t-elt "pm" child)
            (t-elt "rdfs" "subClassOf")
            (t-elt "pm" parent)
            ))




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(in-package :db.agraph.user)
(defmacro db.agraph.user::get-all (n) `(db.agraph.user::select (?x) (q- ?y ,n ?x)))


(defmacro s (&rest body) `(select (?x) (q- ,@body )))

